import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.util.Map;

import javax.media.j3d.Canvas3D;
import javax.media.j3d.GraphicsConfigTemplate3D;
import javax.media.j3d.VirtualUniverse;

public class SystemQuery {
  public static void main(String[] args) {
    VirtualUniverse vu = new VirtualUniverse();
    Map vuMap = vu.getProperties();

    System.out.println("version = " + vuMap.get("j3d.version"));
    System.out.println("vendor = " + vuMap.get("j3d.vendor"));
    System.out.println("specification.version = "
        + vuMap.get("j3d.specification.version"));
    System.out.println("specification.vendor = "
        + vuMap.get("j3d.specification.vendor"));
    System.out.println("renderer = " + vuMap.get("j3d.renderer") + "\n");

    GraphicsConfigTemplate3D template = new GraphicsConfigTemplate3D();

    /*
     * We need to set this to force choosing a pixel format that support the
     * canvas.
     */
    template.setStereo(template.PREFERRED);
    template.setSceneAntialiasing(template.PREFERRED);

    GraphicsConfiguration config = GraphicsEnvironment
        .getLocalGraphicsEnvironment().getDefaultScreenDevice()
        .getBestConfiguration(template);

    Map c3dMap = new Canvas3D(config).queryProperties();

    System.out
        .println("Renderer version = " + c3dMap.get("native.version"));
    System.out.println("doubleBufferAvailable = "
        + c3dMap.get("doubleBufferAvailable"));
    System.out
        .println("stereoAvailable = " + c3dMap.get("stereoAvailable"));
    System.out.println("sceneAntialiasingAvailable = "
        + c3dMap.get("sceneAntialiasingAvailable"));
    System.out.println("sceneAntialiasingNumPasses = "
        + c3dMap.get("sceneAntialiasingNumPasses"));
    System.out.println("textureColorTableSize = "
        + c3dMap.get("textureColorTableSize"));
    System.out.println("textureEnvCombineAvailable = "
        + c3dMap.get("textureEnvCombineAvailable"));
    System.out.println("textureCombineDot3Available = "
        + c3dMap.get("textureCombineDot3Available"));
    System.out.println("textureCombineSubtractAvailable = "
        + c3dMap.get("textureCombineSubtractAvailable"));
    System.out.println("texture3DAvailable = "
        + c3dMap.get("texture3DAvailable"));
    System.out.println("textureCubeMapAvailable = "
        + c3dMap.get("textureCubeMapAvailable"));
    System.out.println("textureSharpenAvailable = "
        + c3dMap.get("textureSharpenAvailable"));
    System.out.println("textureDetailAvailable = "
        + c3dMap.get("textureDetailAvailable"));
    System.out.println("textureFilter4Available = "
        + c3dMap.get("textureFilter4Available"));
    System.out.println("textureAnisotropicFilterDegreeMax = "
        + c3dMap.get("textureAnisotropicFilterDegreeMax"));
    System.out.println("textureBoundaryWidthMax = "
        + c3dMap.get("textureBoundaryWidthMax"));
    System.out
        .println("textureWidthMax = " + c3dMap.get("textureWidthMax"));
    System.out.println("textureHeightMax = "
        + c3dMap.get("textureHeightMax"));
    System.out.println("textureLodOffsetAvailable = "
        + c3dMap.get("textureLodOffsetAvailable"));
    System.out.println("textureLodRangeAvailable = "
        + c3dMap.get("textureLodRangeAvailable"));
    System.out.println("textureUnitStateMax = "
        + c3dMap.get("textureUnitStateMax"));
    System.out.println("compressedGeometry.majorVersionNumber = "
        + c3dMap.get("compressedGeometry.majorVersionNumber"));
    System.out.println("compressedGeometry.minorVersionNumber = "
        + c3dMap.get("compressedGeometry.minorVersionNumber"));
    System.out.println("compressedGeometry.minorMinorVersionNumber = "
        + c3dMap.get("compressedGeometry.minorMinorVersionNumber"));

    System.exit(0);
  }
}